package cn.itcast.web.controller.system;

import cn.itcast.domain.company.Company;
import cn.itcast.domain.system.Dept;
import cn.itcast.domain.system.User;
import cn.itcast.service.system.DeptService;
import cn.itcast.service.system.UserService;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/system/dept")
public class DeptController extends BaseController{

  @Autowired
  private DeptService deptService;

  /*
      方法的作用：展示部门列表
      url: /system/dept/list.do
      参数： 当前页， 页面大小
      返回： system/dept/dept-list
       */
  @RequestMapping("/list")
  public String list(@RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "5") int pageSize) {
    //1. 查询到pageInfo对象
    //companyId是指当前登陆者所属的公司id.
   //由于现在还有完成登陆功能，所以目前的数据只是写死。
    PageInfo<Dept> pageInfo = deptService.findByPage(pageNum, pageSize, getLoginCompanyId());
    //2. 把PageInfo存储到域中
    request.setAttribute("pageInfo", pageInfo);
    //3. 返回到列表页面
    return "system/dept/dept-list";
  }

  /*
    方法的作用：进入添加部门的页面
    url: /system/dept/toAdd.do
    参数： 无
    返回： system/dept/dept-add
     */
  @RequestMapping("/toAdd")
  public ModelAndView toAdd() {
    List<Dept> deptList = deptService.findAll(getLoginCompanyId());
    ModelAndView mv = new ModelAndView();
    mv.addObject("deptList", deptList);
    mv.setViewName("system/dept/dept-add");
    return mv;
  }

  /*
    方法的作用：保存添加部门以及更新部门的信息
    url: /system/dept/edit.do
    参数： dept 对象
    返回： 部门列表
     */
  @RequestMapping("/edit")
  public String edit(Dept dept) {
    //设置当前部门所属的公司
    dept.setCompanyId(getLoginCompanyId());
    dept.setCompanyName(getLoginCompanyName());
    if (StringUtil.isEmpty(dept.getId())) {
      //如果id为空，则为保存
      deptService.save(dept);
    } else {
      //如果id不为空， 则为更新
      deptService.update(dept);
    }
    return "redirect:/system/dept/list.do";
  }

  /*
 方法的作用：进入修改部门的页面
 url: /system/dept/toUpdate.do?id={dept.id}
 参数： id 部门的id
 返回： /system/dept/dept-update
  */
  @RequestMapping("/toUpdate")
  public String toUpdate(String id) {
    //1. 根据id查询一个部门对象，存储到域中
    Dept dept = deptService.findById(id);
    request.setAttribute("dept", dept);
    //2. 查询所有的部门对象，用于展示父部门列表，存储到域中
    List<Dept> deptList = deptService.findAll(getLoginCompanyId());
    request.setAttribute("deptList", deptList);
    //3. 返回部门更新页面
    return "system/dept/dept-update";
  }

  /*
  方法的作用：删除部门
  url: /system/dept/delete.do?id=97f88a8c-90fc-4d52-aed7-2046f62fb498
  参数： id 部门的id
  返回： json对象

  json = {flag:true|false , message:"删除成功|删除失败"}
   */
  @RequestMapping("/delete")
  @ResponseBody  //自动把方法的返回对象转换成json
  public Map<String, Object> delete(String id) {
    Map<String, Object> map = new HashMap<>();
    boolean flag = deptService.delete(id);
    if (flag) {
      //删除成功
      map.put("flag", true);
      map.put("message", "删除成功");
    } else {
      map.put("flag", false);
      map.put("message", "删除失败,该部门被其他部门引用了");
    }
    return map;
  }
}
